package leetcode;

import java.util.ArrayList;
import java.util.List;

/**
 * 给出 n 代表生成括号的对数，请你写出一个函数，使其能够生成所有可能的并且有效的括号组合。
 *
 * 例如，给出 n = 3，生成结果为：
 *
 * [
 *   "((()))",
 *   "(()())",
 *   "(())()",
 *   "()(())",
 *   "()()()"
 * ]
 */
public class Code22 {
    public static void main(String[] args) {
        new Code22().generateParenthesis(3);
    }
    public List<String> generateParenthesis(int n) {
        List<String> need = new ArrayList<>();
        run(need,new String(),0,0,n);
        return need;
    }

    public void run(List<String> list,String str,int left,int right,int all){
        if(str.length()==all*2){
            list.add(str);
            return;
        }
        if(left<all){
            run(list,str+"(",left+1,right,all);
        }

        if(left>right){
            run(list,str+")",left,right+1,all);
        }
    }
}
